/**
 * 组件管理器
 */
WidgetManager = OpenLayers.Class({
	
	initialize: function() {
		//注册地图配置文件装载完成事件
		_events.register("configLoadedEvent",this,this.configLoadListener);
		//地图装载完毕事件
		_events.register("mapLoadedEvent",this,this.onMapLoad);
	},
/**
 * 配置文件加载完成事件 
 */
	configLoadListener:function(configData){
		this.configData = configData;
	
		_events.unregister("configLoadedEvent",null,this.configLoadListener);
		if(this.configData.widget){
			if(!this.configData.widget.text){
					//地图通用组件设置
				for(var i=0;i<this.configData.widget.length;i++){
					var widget = this.configData.widget[i];
					
					//装载widget js脚本
					this.requireWidget(widget+".js");
				}
			}else{
				var widget = this.configData.widget;
				this.requireWidget(widget+".js");
			}
		}
		var menudiv=$("<div></div>");
		var greendiv = $("<div class='green'></div>");
		var ul = $("<ul class='clear'></ul>");
		
		//菜单组件配置
		var container = this.configData.widgetcontainer;
		if(container){
			if(container.widgetgroup){
				if(container.widgetgroup instanceof Array){
						for(var i=0;i<container.widgetgroup.length;i++){
						var label = container.widgetgroup[i].label;
						var li = $("<li style='cursor : pointer'></li>");
						var a = $("<a>"+label+"</a>");
						a[0].configclass = container.widgetgroup[i];
						li.append(a);
						
						var wid = container.widgetgroup[i];
						//加载组件js
						if(wid.config){this.requireWidget(wid+".js");}
						if(!wid.widget){
							ul.append(li);
							continue;
						}
						
						if(wid.widget[0] && typeof(wid.widget[0])!="string"){
							var cul = $("<ul></ul>");
							for(var j=0;j<wid.widget.length;j++){
								var cli=$("<li></li>");
								var ca = $("<a>"+wid.widget[j].label+"</a>");
								ca[0].configclass = wid.widget[j];
								if(wid.widget[j].config){this.requireWidget(wid.widget[j]+".js");}
								cli.append(ca);
								cul.append(cli);
							}
							li.append(cul);
						}else{
							var cul = $("<ul></ul>");
							var cli=$("<li></li>");
							var ca = $("<a>"+wid.widget.label+"</a>");
							ca[0].configclass = wid.widget;
							if(wid.widget.config){this.requireWidget(wid.widget+".js");}
							cli.append(ca);
							cul.append(cli);
							li.append(cul);
						}
						ul.append(li);
					}
				}else {
					/**
					 *只有一个菜单 
					 */
					 	var group = this.configData.widgetcontainer.widgetgroup;
						var label = group.label;
						var li = $("<li></li>");
						var a = $("<a>"+label+"</a>");
						a[0].configclass = group;
						li.append(a);
						ul.append(li);
					 
					 
					 
					 
				}
				
			}
		}
		
		if(ul.find('li').length>0){
			greendiv.append(ul);
			menudiv.append(greendiv);
			menudiv.addClass("menudiv");
			$("#WidgetContainer").append(menudiv);
		}
		
		//配置菜单选择事件
		$("div ul li").hover(
			function() {
				$(this).addClass("active");
				$(this).find("ul").show().animate({opacity: 1}, 100);
			},function() {
				$(this).find("ul").hide().animate({opacity: 0}, 200);
				$(this).removeClass("active");
		});
		
		$initCommonWidget = this;
		
		$("div ul li a").bind("click",function(){
			//this.configclass 为定义的类的名称
			//var loadStr = "var w = new " + widget.split("/")[2] + "()";
			//eval(loadStr);
			
			//点击加载组件
			var widgetId='#'+this.configclass.text.split("/")[2];
			if($("#WidgetContainer").find(widgetId).length>0){
				$("#WidgetContainer").find(widgetId).animate({ width: 'toggle', opacity: 'toggle' },"slow").show(); 
			}else{
				$initCommonWidget.loadWidget(this.configclass);
			}
			
		})


		
		/**
		 * 配置logo
		 */
		var logo = $("<div></div>");
		logo.css("position","absolute");
		logo.css("top","10px");
		logo.css("left","10px");
		logo.css("float","left");
		logo.css("z-index",10000);
		var m = $("<img></img>");
		m[0].src= this.configData.userinterface.logo;
		logo.append(m);
		//$("body").append(logo);
		
		/**
		 * 配置title 
		 */
		var title = $("<div>"+this.configData.userinterface.title+"</div>");
		title.css("position","absolute");
		title.css("top","20px");
		title.css("left","250px");
		title.css("height","0px");
		title.css("float","left");
		title.css("z-index",10000);
		title.css("fontSize","40px")
		title.css("fontWeight","bold");
		title.css("fontFamily","黑体")
		//$("body").append(title);
		
	},

		
/**
 *  地图组件加载完成事件  
 *  @param {Object} map
 */
	onMapLoad:function(map){
		this.map = map;
		
		//调用基础地图组件初始化添加
		if(this.configData.widget){
			this.addMapCommonWidget();
		}
		
	},
	
/**
 *  加载地图通用组件
 * 
 */
	addMapCommonWidget : function(){
		//加载多个通用地图组件
		if(!this.configData.widget.text){
			for(var i=0;i<this.configData.widget.length;i++){
				var c = this.configData.widget[i];
				this.loadWidget(c);
				
			}
		}
		//只有一个通用地图组件时
		else{
			var c = this.configData.widget;
			
			this.loadWidget(c);
		}
		
	},

/**
 *获取组件 
 * @param {Object} name
 */
	getWidget : function(name){
		return this.WidgetMap.get(name);
	},

/**
 *请求加载JS文件 
 * @param {Object} label
 */	
	requireWidget:function(label){
		var jsNode = document.createElement('script');
        jsNode.setAttribute('src', label);
        jsNode.setAttribute('type', 'text/javascript');
		document.getElementsByTagName('head')[0].appendChild(jsNode); 
		
		//有这种写法，试了下，可以用
		// $.getScript(label,function(){});	
	},
	
	onMenuClick:function(data){
		
	},
	
	loadWidget : function(c){
		//延时创建组件对象，如果
		$initCommonWidget = this;
		var interval = setInterval(function(){
			try{
				var widget = c;
				//定义组件类
				//var loadStr = "var w = new " + widget.split("/")[2] + "()";
				var loadStr = "var w = new " + widget.type + "()";
				eval(loadStr);
				$.ajax({
					type: "GET",
					url: c.config,
					data: {},
					cache: false,
					async: false,
					success: function(data){
						var config = $.xml2json(data);
						if(c.left){config.left = c.left;}
						if(c.top){config.top = c.top;}
						if(c.right)config.right=c.right;
						if(c.bottom)config.bottom=c.bottom;
						w.setConfig(config);
						w.setMap($initCommonWidget.map);
						var element = w.getElement();
						$("#WidgetContainer").append(element);
					},
					error: function(XMLHttpRequest, textStatus, errorThrown){
						alert("xml配置读取有误!");
					}
				});
				clearInterval(interval);
				
				//组件对象保存
				$initCommonWidget.WidgetMap.put(widget.label,w);
			}catch(e){
			}
		},50);
		
	},
	WidgetMap : new Map(),//存放组件对象的map数组
	CLASS_NAME:"openGis.WidgetManager"
});

